home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
catlog
/
source
/
check.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-08
|
53KB
|
1,751 lines
/*
NIFTYのLOG整理 check.c
by GHH01217 山先
$Header: CHECK.Cv 1.2 93/02/12 22:44:02 山先 Exp $
*/
#include "log.h"
#define TEST 1
#undef TEST
#define MAX_KAIGISHITSU 21
#define MES_MODE 1
#define FORUM_MODE 2
#define FORUM_IN_MODE 3
static char kaigishitsu_name[ MAX_KAIGISHITSU ][ 82 ];
static int lib_number;
#define CHECK_PRINT_LOG if ( display_log_file_sw == YES ) present_str_print()
static int check_start_line();
static int check_SearchStartSay( char *str , int mail_sw )
{
char sub[ 8 ] , *p1 , *p2;
if ( SearchSayStartDateSw == NO ) return( YES );
p1 = sub;
if ( mail_sw == YES ) {
p2 = SearchSayStartDate + 2;
} else {
p2 = SearchSayStartDate;
*p1++ = *str++; *p1++ = *str++; /* YY */
str++; /* '/' */
};
*p1++ = *str++; *p1++ = *str++; /* MM */
str++; /* '/' */
*p1++ = *str++; *p1++ = *str++; /* DD */
*p1 = '\0';
if ( strcmp( p2 , sub ) <= 0 ) return( YES );
return( NO );
}
static int check_SearchEndSay( char *str , int mail_sw )
{
char sub[ 8 ] , *p1 , *p2;
if ( SearchSayEndDateSw == NO ) return( YES );
p1 = sub;
if ( mail_sw == YES ) {
p2 = SearchSayEndDate + 2;
} else {
p2 = SearchSayEndDate;
*p1++ = *str++; *p1++ = *str++; /* YY */
str++; /* '/' */
};
*p1++ = *str++; *p1++ = *str++; /* MM */
str++; /* '/' */
*p1++ = *str++; *p1++ = *str++; /* DD */
*p1 = '\0';
if ( strcmp( sub , p2 ) <= 0 ) return( YES );
return( NO );
}
static int check_SearchSayDate( char *str , int mail_sw )
{
if ( check_SearchStartSay( str , mail_sw ) == NO ) return( NO );
if ( check_SearchEndSay( str , mail_sw ) == NO ) return( NO );
return( YES );
}
void present_str_print()
{
int c;
c = PresentStrPtr[ PresentStrLen + 1 ];
PresentStrPtr[ PresentStrLen + 1 ] = '\0';
printf("%s\n",PresentStrPtr);
PresentStrPtr[ PresentStrLen + 1 ] = c;
}
void next_str_print()
{
int c;
c = NextStrPtr[ NextStrLen + 1 ];
NextStrPtr[ NextStrLen + 1 ] = '\0';
printf("%s\n",NextStrPtr);
NextStrPtr[ NextStrLen + 1 ] = c;
}
void present_str_copy( char *str )
{
strncpy(str,PresentStrPtr,PresentStrLen); str[PresentStrLen]='\0';
};
void print_start_line()
{
if ( display_log_file_sw == YES ) {
color( YELLOW ); present_str_print(); color( LIGHTBLUE );
};
}
/***************************************************************************
次のように発言の処理を行うことによって、「引用問題」の回避を行う。
「次」というのは、次の発言の処理を行うことである。
「- FFMHOB」あるいは、「1:お知らせ」の各モードによって処理は
異なる。
「無視」というのは、その行を無視することである。
「- FFMHOB」あるいは、「1:お知らせ」の各モードによって処理は
異なる。
「終了」というのは、そのモードを終了することである。
・---------------------・---------・----------・------------・----------・
| mode↓ 出てきた→| xxx/yyy | - FFMHOB | 1:お知らせ | その他 |
|------------・--------+---------+----------+------------+----------・
| | 一致 | 終了 | 終了 | 終了 | 終了 |
| xxx/yyy |--------+---------+----------+------------+----------・
| | 不一致 | 終了 | 終了 | 終了 | 終了 |
|------------+--------+---------+----------+------------+----------・
| | 一致 | 次 | 次 | 終了 | 終了 |
| - FFMHOB |--------+---------+----------+------------+----------・
| | 不一致 | 無視 | 終了 | 終了 | 終了 |
|------------+--------+---------+----------+------------+----------・
| | 一致 | 次 | 次 | 終了 | 終了 |
| 1:お知らせ |--------+---------+----------+------------+----------・
| | 不一致 | 無視 | 無視 | 終了 | 終了 |
・------------・--------・---------・----------・------------・----------・
****************************************************************************/
void check_save_start_sub( )
{
char *p;
#ifdef TEST
printf("\npartition_line=\n%s",partition_line();
printf("\nforum_name=<%s>",forum_name);
printf("\nkaigishitsu_number=<%d>",kaigishitsu_number);
printf("\nhatsugen_number=<%d>",hatsugen_number);
printf("\nhatsugen_date=<%s>",hatsugen_date);
printf("\ncommnent_number=<%d>",comment_number);
#endif
catlog_fprintf( partition_line );
/****************/
/* フォーラム名 */
/****************/
if ( *forum_name == '\0' ) { catlog_fprintf( "UN_KNOWN" );
} else {
/* フォーラム名の拡張子は削除する */
p = last_comma( forum_name );
if ( p != forum_name ) *p = '\0';
/* フォーラム名が8文字よりも長い場合は8文字にする */
if ( strlen( forum_name ) > 8 ) forum_name[ 8 ] = '\0';
catlog_fprintf( forum_name );
};
/**************/
/* 会議室番号 */
/**************/
sprintf( str , "%d" , kaigishitsu_number ); catlog_fprintf( str );
/************/
/* 発言番号 */
/************/
sprintf( str , "%d" , hatsugen_number ); catlog_fprintf( str );
/**************/
/* 発言の日付 */
/**************/
catlog_fprintf( hatsugen_date );
/****************/
/* コメント番号 */
/****************/
sprintf( str , "%d" , comment_number ); catlog_fprintf( str );
/******************/
/* 発言の収集ID */
/******************/
catlog_fprintf( collect_id ); *collect_id = '\0';
catlog_fprintf( forum_name_line );
catlog_fprintf( forum_sub_name_line );
hatugen_su++; /* 1つのファイルの発言の数 */
}
/******************************************************************************
>LIB 数字
としても、すぐに
データライブラリ (1:データ一覧 2:検索 3:アップロード(無料) 4:ダウンロード E:終了)
が表示されない場合があった。(FTOWNS1 1992.8.14.アクセス )
そこで、常に
>LIB 数字
をチェックするように変更した。
******************************************************************************/
void check_set_lib_number()
{
char sub[ 10 ],*p1,*p2;
if ( strncmp( PresentStrPtr , ">" , 2 ) != 0 ) return;
/* sub に3文字コピー */
p1 = sub; p2 = PresentStrPtr + 2;
*p1++ = *p2++; *p1++ = *p2++; *p1++ = *p2++;
*p1 = '\0';
/* to upper */
p1 = sub; while ( *p1 ) *p1++ = toupper( *p1 );
/****************************************/
/* 以下の判定はかなり、いいかげんである */
/* ">LIB" という判定 */
/****************************************/
if ( strcmp( sub , "LIB" ) == 0 ) {
lib_number = atoi( PresentStrPtr + 5 );
};
}
/*****************************************************/
/* last_str に LIB 番号が入っている */
/* next_str には、>1 が入っていることをチェックする */
/*****************************************************/
int isLibNumDir()
{
int len;
char dir[ 20 ] , *p;
if ( NextStrLen > 19 ) return( FALSE );
if ( NextStrLen < 3 ) return( FALSE );
if ( strncmp( NextStrPtr , ">" , 2 ) != 0 ) return( FALSE );
len = NextStrLen - 2;
p = NextStrPtr + 2;
while ( isspace( *p ) ) { p++; len--; };
strncpy( dir , p , len );
if ( strncmp( dir , "1" , len ) == 0 ) return( TRUE );
if ( strncmp( dir , "1" , len ) == 0 ) return( TRUE );
if ( strncmp( dir , "DIR" , len ) == 0 ) return( TRUE );
if ( strncmp( dir , "dir" , len ) == 0 ) return( TRUE );
/* 文字列を小文字にする */
p = dir;
while ( len>0 ) {
*p++ = toupper( *p );
len--;
};
*p = '\0';
if ( strcmp( dir , "DIR" ) == 0 ) return( TRUE );
return( FALSE );
}
static int check_lib_num()
{
int len,lib_num;
char dir[ 20 ] , *p;
if(strncmp(LastStrPtr,"-ダウンロード終了-",20) == 0) return( TRUE );
lib_num = 0;
if ( isLibNumDir() == FALSE ) return( FALSE );
if ( LastStrLen > 19 ) return( FALSE );
if ( LastStrLen < 3 ) return( FALSE );
if ( strncmp( LastStrPtr , ">" , 2 ) != 0 ) return( FALSE );
p = LastStrPtr + 2; len = LastStrLen - 2;
while ( isspace( *p ) ) { p++; len--; };
strncpy( dir , p , len );
dir [ len ] = '\0';
/* 文字列を大文字にする */
p = dir; while ( len > 0 ) { *p++ = toupper( *p ); len--; };
p = dir; if ( strncmp( dir , "LIB" , 3 ) == 0 ) p += 3;
/* 仮に LIB 番号を lib_num に入れる */
lib_num = atoi( p ); if ( lib_num == 0 ) return( FALSE );
/* 0でなければ、新しい LIB 番号とする */
lib_number = lib_num;
return( TRUE );
}
static void check_lib_main( const char *forum__name )
{
char *p1 , *p2;
forever {
check_lib_num();
print_start_line(); /* *PresentStrPtr を YELLOW で表示 */
/* データライブラリ (1:データ の行 */
GET_LINE; /* 先読み */
check_set_lib_number();
CHECK_PRINT_LOG; /* ログ表示 */
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
if ( isLIBLine() == YES ) break;
if ( isLIBFirstLine() == NO ) return;
};
strcpy( forum_name , forum__name );
hatsugen_number = lib_number; /* 発言番号 */
set_hatsugen_date_lib( PresentStrPtr ); /* 発言の日付 sub.c */
comment_number = 0; /* コメント先番号 */
*collect_id = '\0'; /* 発言者のID */
forum_sub_name_line[ 0 ] = '\0';
/* ID の下には LIB を作らない */
if ( without_LIB_say_sw == YES ) return;
kaigishitsu_number = LIB; /* 会議室番号 */
check_save_start_sub( );
check_pool_delete_start = PresentStrPtr;
if ( display_log_file_sw == YES ) color( WHITE );
forever {
if ( isLIBLine() == NO ) {
IFPStrEqu2( "番号 (改行で次頁)" , 17 ) { /* 2行 読み飛ばす */
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
continue;
/*
delete_present_line(); delete_present_line(); continue;
*/
} else { break;
};
};
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
};
catlog_fwrite( );
if ( display_log_file_sw == YES ) color( LIGHTBLUE );
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
/* COLLECT_ID によって収集する */
/* check_pool_delete_start から PresentStrPtr までを調べる */
p1 = check_pool_delete_start;
p2 = PresentStrPtr; /* 保存用 */
while ( p1 < p2 ) {
if ( isCollectID( p1 + 6 ) < 0 ) { /* sub.c */
while ( ( p1 < p2 ) && ( *p1 != 0x0a ) ) p1++;
p1++; /* next char */
continue;
};
check_pool_delete_start = p1;
set_hatsugen_date_lib( p1 ); /* 発言の日付 sub.c */
while ( ( p1 < p2 ) && ( *p1 != 0x0a ) ) p1++;
p1++; /* next char */
PresentStrPtr = p1;
kaigishitsu_number = COLLECT_LIB;
check_save_start_sub( );
catlog_fwrite( ); /* file.c */
};
PresentStrPtr = p2; /* 保存用 */
*collect_id = '\0';
}
/****************************************************************
- FTOWNS1 MES(18):通信ソフトについて(3) 92/04/25 -
001/999 GHH01217 山先 初めての発言
(18) 92/01/24 18:40
*****************************************************************/
static void save_start_mes( )
{
/* 発言番号 */
hatsugen_number = atoi( hyoudai_line );
/* 日付 */
set_hatsugen_date_forum( mes_number_line ); /* sub.c */
/*************************************
123456789 123456789 123456789 1234567
( 1) 89/04/13 20:39 006へのコメント
( 2) 92/05/04 03:20
**************************************/
if ( strlen( mes_number_line ) > 21
&& isdigit( mes_number_line[23] )
) { comment_number = atoi( mes_number_line + 23 );
} else { comment_number = 0;
};
check_save_start_sub( );
/* 発言の表題の行 */
catlog_fprintf( hyoudai_line );
/* 会議室番号の行 */
catlog_fprintf( mes_number_line );
}
/**************************************************/
/* 001/999 GHH01217 山先 お知らせ */
/* (00) 92/01/02 03:04 */
/**************************************************/
static int is_1_say_end_inyou( char *now , const char *sub )
{
int c;
int m1,m2;
if ( Re_sort_log_sw == YES ) {
/*********************************************/
/* now を更新して終了 引用発言とはみなさない */
/*********************************************/
strcpy( now , sub ); return( TRUE );
};
/********************************/
/* 下の範囲は引用ではないとする */
/********************************/
/* 会議室番号のチェック */
if ( atoi( mes_number_line + 1 ) == atoi( NextStrPtr + 1 ) ) {
/************************/
/* 会議室番号が同じ場合 */
/************************/
m1 = atoi( now ); m2 = atoi( sub );
if ( m1 < m2 && m2 <= m1 + 5 ) {
/*********************************************/
/* now を更新して終了 引用発言とはみなさない */
/*********************************************/
strcpy( now , sub ); return( TRUE );
};
color( YELLOW ); beep();
printf("\n<%s>の\n%s\n%s\nで引用部分を見つけました。\n",
file_name ,
hyoudai_line , /* 発言の表題の行 */
mes_number_line /* 会議室番号の行 */
);
if ( m1 < m2 ) {
/* 新しい基数の方が大きい場合のみ、たずねる */
color( WHITE );
c = *PresentStrPtr;
*PresentStrPtr = '\0';
printf("%s",check_pool_delete_start);
*PresentStrPtr = c;
present_str_print();
next_str_print();
color( YELLOW );
printf( "発言の基数=(旧)%s → (新)%s ですが、\n"
" 引用として処理してもよろしいですか?"
, now , sub
);
color( WHITE );
if ( Quote_All_Say_sw == NO ) {
if ( without_MES_say_sw == YES ) {
printf("YES");
printf("\n発言の基数を(新=%s)に変更します。",sub);
strcpy( now , sub );
/********************************/
/* 修正しないで終了 */
/* しかし、発言の区切りとはする */
/********************************/
return( TRUE );
};
if ( get_yesno_mes() == NO ) {
printf("発言の基数を(新=%s)に"
"変更してもよいですか? ",sub);
if ( get_yesno_mes() == YES ) {
strcpy( now , sub );
};
/********************************/
/* 修正しないで終了 */
/* しかし、発言の区切りとはする */
/********************************/
return( TRUE );
};
} else {
color( RED );
printf("\nQuote-All-Say スイッチで強制的に、");
};
color( YELLOW );
};
puts("修正します。\n");
color( WHITE );
} else {
/**************************/
/* 会議室番号が異なる場合 */
/**************************/
; /* 何もしない → 引用として扱う */
};
insert_char( PresentStrPtr , '>' ); PresentStrLen++;
insert_char( NextStrPtr , '>' ); NextStrLen++;
return( FALSE );
}
/* result :
TRUE 発言の終了である
FALSE 発言の終了ではない
*/
static int is_1_say_end( char *now , int mode )
{
int d;
char sub[ 16 ],*p1,*p2;
if ( PresentStrLen == 0 ) return( NO );
if ( isMesInputLine() == YES ) {
/* 4:データライブラリ 5:会員情報 6:リアルタイム会議 */
if ( isMesInputNextLine() == YES ) return( YES );
};
if ( isMesHyoudaiLine() == YES && isMesSecondLine() == YES ) {
if ( mode == MES_MODE ) return( TRUE );
get_mes_now_number( PresentStrPtr , sub );
/* 一致する場合は終了 */
if ( strcmp( now , sub ) == 0 ) return( TRUE );
/************************************/
/* 引用部分であるので発言を修正する */
/************************************/
return ( is_1_say_end_inyou( now , sub ) );
};
/****************/
/* - Fxxxxxの行 */
/****************/
if ( isMesForumNameLine() == YES ) {
d = get_mes_num_from_forum_name_line( PresentStrPtr );
present_str_copy( kaigishitsu_name[ d ] );
if ( mode == MES_MODE ) return( TRUE );
/* フォーラム名がある場合 - Fxxxxの場合 */
p1 = PresentStrPtr + 2; p2 = sub;
while ( isalnum( *p1 ) ) *p2++ = *p1++;
*p2 = '\0';
/* 一致する場合は終了 */
if ( strcmp( forum_name , sub ) == 0 ) return( TRUE );
/* 一致しない場合 */
if ( mode == FORUM_MODE ) return( TRUE );
/************************************/
/* 引用部分であるので発言を修正する */
/************************************/
printf("\n<%s>の\n%s\n%s\nで引用部分を見つけました。\n",
file_name ,
hyoudai_line , /* 発言の表題の行 */
mes_number_line /* 会議室番号の行 */
);
present_str_print();
puts("修正します。");
insert_char( PresentStrPtr , '>' ); PresentStrLen++;
return( FALSE ); /* 無視する */
};
/* 123456789 123456 */
IFPStrEqu3( "電子会議 (1:発言" , 16 ) return( TRUE );
IFPStrEqu3( "電子会議 (1:コメ" , 16 ) return( TRUE );
IFPStrEqu3( "電子会議 (改行の" , 16 ) return( TRUE );
IFPStrEqu3( ">◆次頁はありません◆",22) return( TRUE );
IFPStrEqu3( "◆次頁はありません◆",20) return( TRUE );
IFPStrEqu3("*****log整理",12) return( TRUE );
if ( check_start_line() != 0 ) return( TRUE );
if ( kaigishitsu_number == PATIO ) {
if ( isPATIOEnd() == YES ) return( TRUE );
};
return( FALSE );
}
/**********************************************************************
>ID (改行のみ:自分のHP)
>:GHH01217
>パスワード
>:
>HP>READ NEW
> 1 2 3 4 5 6
> 123456789 123456789 123456789 123456789 123456789 123456789 123456789
>001 [92/05/04 16:00] GHH01217 オープンしました
***********************************************************************/
/************************************************************************/
/* */
/* save_start_hp() */
/* */
/************************************************************************/
static void save_start_hp( char *id_name )
{
/* 日付 */
set_hatsugen_date_hp( check_pool_delete_start ); /* sub.c */
strcpy( forum_name , id_name );
hatsugen_number = atoi( check_pool_delete_start ); /* 発言番号 */
comment_number = 0; /* コメント先番号 */
/* ここを呼ぶ前に設定しておくこと 発言者のID
collect_id[ ]
*/
sprintf( forum_name_line , "- HP:%sのHome Partyです。",id_name);
forum_sub_name_line[ 0 ] = '\0';
check_save_start_sub( );
}
static void find_hp_first_line()
{
do {
GET_LINE;
check_set_lib_number();
if ( check_check_end() == YES ) break;
} while ( isHPFirstLine() == NO );
}
static void check_hp_loop( char *id_name )
{
int d;
d = 0;
while ( isHPFirstLine() == YES ) {
check_pool_delete_start = PresentStrPtr;
d = PresentStrLen;
if ( without_HP_say_sw == YES
|| check_SearchSayDate( PresentStrPtr + 6 , NO ) == NO
) {
GET_LINE2 break; check_set_lib_number();
check_skip_useless_line(); continue;
};
/******************************************/
/* 先ず、この発言を CATLOG.TMP に書き出す */
/******************************************/
*collect_id = '\0';
kaigishitsu_number = HP; /* 会議室番号 */
save_start_hp( id_name );
print_start_line(); /* *PresentStrPtr を黄色で表示 */
if ( display_log_file_sw == YES ) color( WHITE );
GET_LINE2 ; /* 次の行 break はしない */
check_set_lib_number();
while ( isHPFirstLine() != YES ) {
CHECK_PRINT_LOG; /* ログ表示 */
if ( check_check_end() == YES ) break;
GET_LINE2 break; /* 先読み */
check_set_lib_number();
};
catlog_fwrite( );
if ( display_log_file_sw == YES ) color( LIGHTBLUE );
/****************/
/* IDで収集? */
/****************/
if ( collect_ID_sw != YES
|| d == 0
) {
check_skip_useless_line();
} else {
/* 123456789 123456789 123456789 123456789 1234 */
/* 001 [92/05/04 16:00] GHH01217 オープン */
if ( isCollectID( check_pool_delete_start + 23 ) >= 0 ) {
/* sub.c */
/* 一致したので CATLOG.TMP に書き出す */
save_start_hp( id_name );
catlog_fwrite( );
};
};
};
}
static void check_hp()
{
char id_name[ 12 ] , *p;
print_start_line(); /* *PresentStrPtr を YELLOW で表示 */
/* HP 設定者の ID 番号の入力を促す行? */
GET_LINE;
check_set_lib_number();
if ( PresentStrLen != 10 ) return;
IFPStrNotEqu2(":",2) return;
p = PresentStrPtr + 2;
while( isspace( *p ) ) p++; /* skip space */
strncpy( id_name , p , 8 ); /* copy ID */
id_name[ 8 ] = '\0';
p = id_name; while( *p ) *p++ = toupper( *p ); /* 大文字にする */
/* ID名であるかチェック */
if ( isIDname( id_name ) != YES ) return;
/* パスワードの入力を促す行? */
/*****************************************************************
自分の HP には パスワードはいらないので消去
GET_LINE ( TRUE ); without_crlf( PresentStrPtr );
check_set_lib_number();
IFPStrEqu2("パスワード",10) return;
******************************************************************/
find_hp_first_line();
check_hp_loop( id_name );
}
/**********************************************************************
1 2 3 4
123456789 123456789 123456789 123456789 12
1 山本 年秀 GHH01217 05/05 13:12
題名:まだちょっとおかしい...
***********************************************************************/
/************************************************************************/
/* */
/* save_start_mail() */
/* */
/************************************************************************/
static void save_start_mail()
{
/*
0 1 2 3 4
123456789 123456789 123456789 123456789 12
1 山本 年秀 GHH01217 05/05 13:12
*/
hatsugen_number = atoi( check_pool_delete_start ); /* 発言番号 */
/* 日付 */
set_hatsugen_date_mail( check_pool_delete_start ); /* sub.c */
comment_number = 0; /* コメント先番号 */
/* ここを呼ぶ前に設定しておくこと 発言者のID
collect_id[ ]
*/
sprintf( forum_name_line , "- MAIL:%sからのメールです。", forum_name );
forum_sub_name_line[ 0 ] = '\0';
check_save_start_sub( );
}
static void check_mail()
{
print_start_line(); /* *PresentStrPtr を YELLOW で表示 */
while ( isMailFirstLine() == YES ) {
check_pool_delete_start = PresentStrPtr;
if ( without_MAIL_say_sw == YES
|| check_SearchSayDate( PresentStrPtr+32 , YES ) == NO
) {
GET_LINE2 break; check_set_lib_number();
check_skip_useless_line(); continue;
};
/* 発信者のID = フォーラム名 */
/*
0 1 2 3 4
123456789 123456789 123456789 123456789 12
1 山本 年秀 GHH01217 05/05 13:12
*/
strncpy( forum_name , PresentStrPtr + 22 , 8 );
forum_name[ 8 ] = '\0';
/******************************************/
/* 先ず、この発言を CATLOG.TMP に書き出す */
/******************************************/
*collect_id = '\0'; /* 1992.9.9 これがなかったために……… */
kaigishitsu_number = MAIL; /* 会議室番号 */
save_start_mail();
GET_LINE;
check_set_lib_number();
while ( isMailFirstLine() != YES ) {
GET_LINE2 break; check_set_lib_number();
if ( check_check_end() == YES ) break;
};
/* mail の本文を書き出す */
catlog_fwrite();
/****************/
/* IDで収集? */
/****************/
if ( collect_ID_sw == YES ) {
if ( isCollectID( forum_name ) >= 0 ) { /* sub.c */
/* 一致したので CATLOG.TMP に書き出す */
save_start_mail();
catlog_fwrite( ); /* mail の本文を書き出す */
};
};
check_skip_useless_line();
};
}
/**********************************************************************
1 2 3 4
123456789 123456789 123456789 123456789 12
あなたの御利用状況は次のとおりです
年月 回数 時間 (分) アクセス料金 サーチャージ 料金合計 (円)
92/03 47 268 2,386 0 2,386
92/04 56 489 4,606 0 4,606
92/05月は課金データがありません
日毎情報 (改行で表示 E:終了)
>[EOF]
****************
* 以下は新形式 *
****************
年/月 回数 時間 (分) 基本料金 (円) 追加料金 (円) 料金合計 (円)
92/07 104 715 6,408 0 6,408
無料使用権 (円) 課税対象額 (円) 請求額 (円)
0 6,408 6,600
日毎情報 (改行で表示 E:終了)
>[EOF]
***********************************************************************/
/************************************************************************/
/* */
/* save_start_bill() */
/* */
/************************************************************************/
static void save_start_bill()
{
int i,line,add;
/*
1 2 3 4
123456789 123456789 123456789 123456789 12
92/03 47 268 2,386 0 2,386
92/09 137 584 5,228 0 5,228
*/
/* 3か月分の利用回数の合計を計算する 新形式でも同じ位置から計算する */
line = 0;
for ( i=0 ; i<3 ; i++ ) line += atoi( bill_line[ i ] + 6 );
strcpy( forum_name , "BILL" ); /* フォーラム名 */
hatsugen_number = line; /* 発言番号 */
/* 日付 */
add = 0;
if ( bill_line_new_type_sw != TRUE ) add = 1;
set_hatsugen_date_bill( bill_line[0] + add ); /* sub.c */
comment_number = 0; /* コメント先番号 */
*collect_id = '\0'; /* 発言者のID */
strcpy( forum_name_line , "- BILL:NIFTYの課金情報です。");
forum_sub_name_line[ 0 ] = '\0';
kaigishitsu_number = BILL; /* 会議室番号 */
check_save_start_sub( );
if ( bill_line_new_type_sw == TRUE ) { catlog_fprintf(BILL_SECOND_LINE2 );
} else { catlog_fprintf(BILL_SECOND_LINE );
};
for ( i=0 ; i<3 ; i++ ) catlog_fprintf( bill_line[ i ] );
}
static int check_bill_first_line()
{
IFPStrEqu2(BILL_FIRST_LINE,strlen(BILL_FIRST_LINE)) return( YES );
return( NO );
}
int check_bill_second_line()
{
IFPStrEqu2(BILL_SECOND_LINE,strlen(BILL_SECOND_LINE)) return( YES );
IFPStrEqu2(BILL_SECOND_LINE2,strlen(BILL_SECOND_LINE2)) return( YES );
return( NO );
}
/************************************************************************
年月 回数 時間 (分) アクセス料金 サーチャージ 料金合計 (円)
1 2 3 4 5 6 7
123456789 123456789 123456789 123456789 123456789 123456789 123456789 12
92/03 47 268 2,386 0 2,386
92/05月は課金データがありません
****************
* 以下は新形式 *
****************
年/月 回数 時間 (分) 基本料金 (円) 追加料金 (円) 料金合計 (円)
92/07 104 715 6,408 0 6,408
*************************************************************************/
static int check_bill_line()
{
if ( check_digit( 1 , 2 ) == NO ) return( NO ); /* 年 */
if ( PresentStrPtr[3] != '/' ) return( NO );
if ( check_digit( 4 , 5 ) == NO ) return( NO ); /* 月 */
if ( PresentStrLen != 0
&& strncmp(
PresentStrPtr+6 ,
NO_BILL_MES ,
strlen(NO_BILL_MES)
)==0
) return( YES );
if ( ! isdigit( PresentStrPtr[ 13 ] ) ) return( NO ); /* 回数 */
if ( ! isdigit( PresentStrPtr[ 26 ] ) ) return( NO ); /* 時間 */
if ( ! isdigit( PresentStrPtr[ 41 ] ) ) return( NO ); /* 料金 */
if ( ! isdigit( PresentStrPtr[ 55 ] ) ) return( NO ); /* サーチャージ */
if ( ! isdigit( PresentStrPtr[ 72 ] ) ) return( NO ); /* 合計 */
return( YES );
}
static int check_bill()
{
int i;
print_start_line(); /* *PresentStrPtr を YELLOW で表示 */
GET_LINE ( TRUE ); check_set_lib_number(); /* 先読み */
while ( check_bill_second_line() == NO ) {
if(strncmp(PresentStrPtr+6,"月は課金データがありません",26)==0) break;
if ( check_check_end() == YES ) return( TRUE );
GET_LINE ( TRUE ); check_set_lib_number(); /* 先読み */
};
/*******************************/
/* 3か月分の課金データをストア */
/*******************************/
for ( i=0 ; i<3 ; i++ ) strcpy( bill_line[i] , " 0" );
if ( ( PresentStrLen != 0
&& strncmp(
PresentStrPtr ,
BILL_SECOND_LINE2 ,
strlen( BILL_SECOND_LINE2 )
) == 0
)
|| strncmp(PresentStrPtr+6,"月は課金データがありません",26) == 0
) {
/**********/
/* 新形式 */
/**********/
bill_line_new_type_sw = TRUE;
i = 0;
while ( i<3 ) {
IFPStrEqu2(BILL_SECOND_LINE2,strlen(BILL_SECOND_LINE2)) {
GET_LINE ( TRUE ); check_set_lib_number();
present_str_copy( bill_line[i] );
i++;
} else if (
strncmp(PresentStrPtr+6,"月は課金データがありません",26) == 0
) {
present_str_copy( bill_line[i] );
i++;
GET_LINE ( TRUE ); check_set_lib_number(); /* 先読み */
} else {
if ( check_check_end() == YES ) break; /* return( TRUE ); */
GET_LINE ( TRUE ); check_set_lib_number(); /* 先読み */
};
};
} else {
/**********/
/* 旧形式 */
/**********/
bill_line_new_type_sw = FALSE;
for ( i=0 ; i<3 ; i++ ) {
GET_LINE ( TRUE ); check_set_lib_number();
if ( check_bill_line() == NO ) return( TRUE );
present_str_copy( bill_line[i] );
};
};
if ( without_BILL_say_sw == NO ) save_start_bill();
if ( bill_line_new_type_sw != TRUE ) {
GET_LINE ( TRUE ); check_set_lib_number(); /* 先読み */
};
return( TRUE );
}
static int check_end_bill()
{
if ( PresentStrLen == 0 ) return( NO );
if ( check_bill_first_line() == YES ) return( YES );
/**********************/
/* 下は新形式でも同じ */
/**********************/
/* 123456789 123456789 123456789 */
IFPStrEqu("日毎情報 (改行で表示 E:終了)",29) return( YES );
return( NO );
}
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/
/*
>番号 発言 (未読) 最新 会議室名
>18 323 ( 8) 08/19 【自 由】Free Talkers Salon『CITY』
>20 214 ( 2) 08/20 【交 流】自己紹介の場、『無節荘』第12館
の行の処理
*/
static void initial_kaigishitsu_name()
{
int i;
for ( i=0 ; i<MAX_KAIGISHITSU ; i++ ) {
kaigishitsu_name[ i ][ 0 ] = '\0';
};
}
void check_skip_useless_line() /* 必要のない行を読み飛ばす */
{
int line;
#ifdef TEST
printf("\nskip_useless_lineです。\n");
#endif
/* 番号 発言 (未読) 最新 会議室名 の行を探す */
while ( check_start_line() == 0 ) {
/* 123456789 123456789 123456789 123456 */
IFPStrEqu("番号 発言 (未読) 最新 会議室名",36) {
/* 会議室の一覧を kaigishitsu_name に入れる */
initial_kaigishitsu_name(); /* 初期化 */
forever {
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE; /* 先読み */
check_set_lib_number();
IFPStrEqu2(">",2) break; /* 行頭の「>」で終了 */
line = atoi( PresentStrPtr );
if ( line == 0 ) break; /* 終了 */
if ( line > 20 ) break; /* 終了 */
present_str_copy( kaigishitsu_name[ line ] );
};
};
if ( isLIBLine() == YES ) break;
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE; /* 先読み */
check_set_lib_number();
ERROR_CHECK;
};
#ifdef TEST
printf("\nskip_useless_lineで↓の行が確認されました。\n");
present_str_print();
if ( get_yesno() == NO ) exit( 0 );
#endif
}
static void skip_1_say( char *now , int mode )
{
if ( display_log_file_sw == YES ) color( LIGHTBLUE );
forever {
if ( check_check_end() == YES
&& is_1_say_end( now , mode ) == TRUE
) {
break;
};
/* 123456789 123456789 123456789 */
IFPStrEqu("続き(改行で表示 S:次の発言)",30) {
if ( NextStrLen == 2
&& strncmp( NextStrPtr , ">" , 2 ) == 0
) {
/* 2行 読み飛ばす */
delete_present_line(); delete_present_line();
continue;
};
};
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
};
}
static void save_1_say( const char *forum__name , char *now , int mode )
{
int i;
char *p1 , *p2;
#ifdef TEST
printf("\nforum_name=<%s>",forum__name);
printf("\nnow=<%s>",now);
printf("\nmode=<%d>",mode);
printf("\nmes_number_line=↓\n%s",mes_number_line();
#endif
/* フォーラム名 */
strcpy( forum_name , forum__name );
check_pool_delete_start = PresentStrPtr;
if ( without_MES_say_sw == YES
|| check_SearchSayDate( mes_number_line + 7 , NO ) == NO
) {
skip_1_say( now , mode ); return;
};
/****************************/
/* 削除した発言は登録しない */
/* 1992.8.26 */
/****************************/
if ( Delete_Deleted_Say_sw == YES ) {
if ( hyoudai_line[ 3 ] == '/' ) {
p1 = hyoudai_line + 10; p2 = hyoudai_line + 38;
} else {
p1 = hyoudai_line + 12; p2 = hyoudai_line + 39;
};
if ( *p1 == '*' || strncmp( p2 , "発言者削除" , 10 ) == 0 ) {
skip_1_say( now , mode ); return;
};
};
/******************************************/
/* 先ず、この発言を CATLOG.TMP に書き出す */
/******************************************/
/* 会議室を表す行をセット */
i = atoi( mes_number_line + 1 ); /* 会議室番号 */
if ( 0<i && i<21 ) {
if ( kaigishitsu_name[ i ][ 0 ] != '\0' ) {
strcpy( forum_sub_name_line , kaigishitsu_name[ i ] );
};
} else {
strcpy( forum_sub_name_line , "" );
};
*collect_id = '\0';
/* 会議室番号 */
kaigishitsu_number = ( mes_number_line[1] & 0x0f ) * 10 +
( mes_number_line[2] & 0x0f );
save_start_mes( );
if ( display_log_file_sw == YES ) color( WHITE );
forever {
if ( check_check_end() == YES
&& is_1_say_end( now , mode ) == TRUE
) {
break;
};
/* 123456789 123456789 123456789 */
IFPStrEqu("続き(改行で表示 S:次の発言)",30) {
if ( NextStrLen == 2
&& strncmp( NextStrPtr , ">" , 2 ) == 0
) {
/* 2行 読み飛ばす */
delete_present_line(); delete_present_line();
continue;
};
};
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
};
if ( display_log_file_sw == YES ) color( LIGHTBLUE );
if ( catlog_fwrite( ) == 0 ) {
strcpy(str,"save_1_say 書き込みが出来ませんでした。");
error_return( str );
};
/****************/
/* IDで収集? */
/****************/
if ( collect_ID_sw != YES ) return;
if ( hyoudai_line[ 3 ] == '/' ) { p1 = hyoudai_line + 10;
} else { p1 = hyoudai_line + 12;
};
if ( isCollectID( p1 ) >= 0 ) { /* sub.c */
save_start_mes( );
if ( catlog_fwrite( ) == 0 ) {
strcpy(str,"save_1_say 書き込みが出来ませんでした。");
error_return( str );
};
};
}
/**************************************************/
/* xxx/xxx から始まる場合 */
/* */
/* 001/999 GHH01217 山先 お知らせ */
/* (00) 92/01/02 03:04 */
/**************************************************/
static void check_hyoudai_line_mode( char *dir_name )
{
char now[ 8 ];
if ( isMesSecondLine()== NO ) return;
initial_kaigishitsu_name();
/* now の設定 */
get_mes_now_number( PresentStrPtr , now ); /* sub.c */
strcpy( forum_name_line, "- UNKNOWN:フォーラム名が不明の発言です。");
forum_sub_name_line[ 0 ] = '\0';
forever {
/* 発言の表題の行 */
present_str_copy( hyoudai_line );
print_start_line(); /* *PresentStrPtr を黄色で表示 */
GET_LINE; /* 会議室番号の行 */
check_set_lib_number();
CHECK_PRINT_LOG; /* ログ表示 */
present_str_copy( mes_number_line );
GET_LINE; /* 先読み : 発言開始の行 */
check_set_lib_number();
save_1_say( dir_name , now , MES_MODE );
ERROR_CHECK;
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
if ( isMesHyoudaiLine() != YES ) return;
};
}
/*********************************************************************/
/* - Fxxxx から始まる場合 */
/* - FTOWNS1 MES(18):通信ソフトについて(3) 92/04/25 - */
/* フォーラム名は- Fxxxx から取る */
/* - Fxxxx で終了 */
/* */
/* 同じフォーラムの中の発言を処理する */
/* フォーラムが異なれば出る。 */
/* */
/*********************************************************************/
static void
check_forum_name_mode_loop( const char *forum_name , int mode )
{
int d;
char sub[ 24 ] , now[ 8 ];
#ifdef TEST
printf("\ncheck_forum_name_mode_loop(%s,%d) 今の行=↓\n",forum_name,mode);
present_str_print();
#endif
if ( isMesHyoudaiLine() == NO ) {
if ( PresentStrPtr == NULL ) return;
printf("\n表題の行でないといけないのに、そうなっていないぞ~~。");
printf("\nあれ~~CATLOGのバグだぞ~~↓\n");
present_str_print();
};
*now = '\0';
get_mes_now_number( PresentStrPtr , now ); /* sub.c */
forever {
print_start_line(); /* *PresentStrPtr を YELLOW で表示 */
present_str_copy( hyoudai_line );
GET_LINE; /* 先読み : 会議室番号の行 */
check_set_lib_number();
CHECK_PRINT_LOG; /* ログ表示 */
present_str_copy( mes_number_line );
GET_LINE; /* 先読み : 発言開始の行 */
check_set_lib_number();
/**************/
/* 発言の登録 */
/**************/
save_1_say( forum_name , now , mode );
ERROR_CHECK;
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
while( isLIBFirstLine()==YES ) check_lib_main( forum_name );
/* 次の発言に対する処理 */
if ( isMesHyoudaiLine() == YES ) {
/* 次の発言 */
/* 何もしない */
} else if ( isMesForumNameLine() == YES ) {
/* - FFMHOB の行 */
if ( mode == FORUM_MODE ) {
/* フォーラム名が異なれば終了 */
get_forum_name( PresentStrPtr , sub );
if (strcmp( forum_name , sub ) != 0 ) return;
};
d = get_mes_num_from_forum_name_line( PresentStrPtr );
present_str_copy( kaigishitsu_name[ d ] );
present_str_copy( forum_sub_name_line );
GET_LINE; /* 先読み : 発言の表題の行 */
check_set_lib_number();
check_skip_useless_line(); /* 必要のない行 */
if ( isMesHyoudaiLine() != YES ) return;
/********************/
/* now を書き換える */
/********************/
get_mes_now_number( PresentStrPtr , now );
} else {
return;
};
};
}
/*******************************************/
/* ここからが forum_name_mode の本当の入口 */
/*******************************************/
static void
check_forum_name_mode()
{
/*
char forum_name[ 24 ];
*/
#ifdef TEST
printf("\ncheck_forum_name_mode() 今の行=<");
present_str_print();
#endif
initial_kaigishitsu_name();
forum_name_line[ 0 ] = forum_sub_name_line[ 0 ] = '\0';
forum_name[ 0 ] = '\0';
print_start_line(); /* *PresentStrPtr を YELLOW で表示 */
present_str_copy( forum_sub_name_line );
get_forum_name( PresentStrPtr , forum_name );
GET_LINE; /* 表題の行 */
check_set_lib_number();
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
if ( isMesHyoudaiLine() != YES || isMesSecondLine() != YES ) {
return;
};
check_forum_name_mode_loop( forum_name , FORUM_MODE );
}
/***********************************************************/
/* <FMフォーラム3(ホビー館) > FFMHOB */
/* 1:お知らせ 2:掲示板 3:電子会議 */
/* 4:データライブラリ 5:会員情報 6:リアルタイム会議 */
/* 7:SYSOP 宛メール 8:オプション E:終了 */
/***********************************************************/
static int check_forum_mode_end()
{
if ( isMesInputLine() == YES ) { /* フォーラム */
/* 4:データライブラリ 5:会員情報 6:リアルタイム会議 */
if ( isMesInputNextLine() == YES ) return( YES );
};
IFPStrEqu("ID (改行のみ:自分のHP)",23) return( YES ); /* HP */
if ( isHPFirstLine() == YES ) return( YES ); /* HP */
IFPStrEqu2("ID (改行のみ:自分のパティオ)",29) return( YES ); /* PATIO */
if ( isMailFirstLine() == YES ) return( YES ); /* MAIL */
if ( check_bill_first_line() == YES ) return( YES ); /* BILL */
if ( isLIBLine() == YES ) return( YES ); /* LIB 番号 */
return( NO );
}
static void check_forum_mode()
{
int d;
/*
char forum_name[ 24 ];
*/
#ifdef TEST
printf("\ncheck_forum_mode() の入口です。今の行↓\n");
present_str_print();
#endif
initial_kaigishitsu_name();
forum_name_line[ 0 ] = forum_sub_name_line[ 0 ] = '\0';
forum_name[ 0 ] = '\0';
print_start_line(); /* *PresentStrPtr を黄色で表示 */
/* <FMフォーラム3(ホビー館) > FFMHOB */
/* の行をコピー */
strncpy( forum_name_line , LastStrPtr , LastStrLen );
forum_name_line[ LastStrLen ] = '\0';
forum_sub_name_line[ 0 ] = '\0';
if ( get_forum_name_last_str( forum_name ) == NO ) {
/* 前の行にフォーラム名がない */
strcpy( forum_name , "BEGIN" );
};
forever {
GET_LINE; /* 先読み:不用の行 */
check_set_lib_number();
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
while( isLIBFirstLine() == YES ) check_lib_main( forum_name );
while ( isMesForumNameLine() == YES ) {
d = get_mes_num_from_forum_name_line( PresentStrPtr );
present_str_copy( kaigishitsu_name[ d ] );
present_str_copy( forum_sub_name_line );
print_start_line(); /* *PresentStrPtr を黄色で表示 */
GET_LINE; /* 先読み */
check_set_lib_number();
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
while( isLIBFirstLine() == YES ) check_lib_main( forum_name );
/******************************************/
/* フォーラム関係以外の行があると終了する */
/******************************************/
if ( check_forum_mode_end() == YES ) return;
};
#ifdef TEST
printf("\ncheck_forum_mode() の途中です。今の行=↓\n");
present_str_print();
printf("\nフォーラム名 =<%s>",forum_name);
printf("\nフォーラム名の行 =↓\n<%s>",forum_name_line();
printf("\n会議室名の行=↓\n<%s>",forum_sub_name_line();
#endif
/******************************************/
/* フォーラム関係以外の行があると終了する */
/* 1992.9.15 */
/******************************************/
if ( check_forum_mode_end() == YES ) return;
check_forum_name_mode_loop( forum_name , FORUM_IN_MODE );
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
while ( isLIBFirstLine() ==YES ) check_lib_main( forum_name);
/******************************************/
/* フォーラム関係以外の行があると終了する */
/* 1992.9.15 */
/******************************************/
if ( check_forum_mode_end() == YES ) return;
};
}
/****************************************************************/
/*****************************************************************
>ID (改行のみ:自分のパティオ)
>:GHH01217
>パスワード
>:
>番号 発言 (未読) 最新 会議室名
> 1 60 ( 60) 12/18 CATLOGの部屋だよ
123456789 123456789 123456789 123456789 123456789 123456789
>00001/00060 GHH01217 山先 ご利用に際しての注意
>( 1) 92/12/14 00:06
>PATIO(R)>
>PATIO(N)>
>PATIO(C)>
>読む (1:表示 改行のみ:次タイトル)
>>
*****************************************************************/
/****************************************************************/
static void save_start_patio( const char *id_name )
{
kaigishitsu_number = PATIO;
/* 日付 */
set_hatsugen_date_forum( mes_number_line ); /* sub.c */
strcpy( forum_name , id_name );
hatsugen_number = atoi( hyoudai_line ); /* 発言番号 */
/* コメント先番号 */
if ( strlen( mes_number_line ) > 21
&& isdigit( mes_number_line[23] )
) { comment_number = atoi( mes_number_line + 23 );
} else { comment_number = 0;
};
/* ここを呼ぶ前に設定しておくこと
collect_id[ ]
forum_name_line[ ]
forum_sub_name_line[ ]
*/
check_save_start_sub( );
}
static void check_patio_loop( const char *id_name )
{
int i , mode;
char now[ 8 ] , *p1;
/* フォーラム名 */
strcpy( forum_name , id_name );
mode = FORUM_IN_MODE;
initial_kaigishitsu_name();
check_skip_useless_line(); /* 必要のない行を読み飛ばす */
/* now の設定 */
get_mes_now_number( PresentStrPtr , now ); /* sub.c */
sprintf( forum_name_line, "PATIO:%s です。" , id_name );
forum_sub_name_line[ 0 ] = '\0';
while ( isPATIOFirstLine() == YES ) {
check_pool_delete_start = PresentStrPtr;
present_str_copy( hyoudai_line );
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
present_str_copy( mes_number_line );
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
if ( without_PATIO_say_sw == YES
|| check_SearchSayDate( mes_number_line + 7 , NO ) == NO
) {
skip_1_say( now , mode ); continue;
};
/****************************/
/* 削除した発言は登録しない */
/****************************/
if ( Delete_Deleted_Say_sw == YES ) {
if ( *( hyoudai_line + 12 ) == '*'
|| strncmp( hyoudai_line + 39 , "発言者削除" , 10 ) == 0
) {
skip_1_say( now , mode ); continue;
};
};
/* 会議室を表す行をセット */
i = atoi( mes_number_line + 1 ); /* 会議室番号 */
if ( 0<i && i<21 ) {
if ( kaigishitsu_name[ i ][ 0 ] != '\0' ) {
strcpy( forum_sub_name_line , kaigishitsu_name[ i ] );
};
} else {
strcpy( forum_sub_name_line , "" );
};
*collect_id = '\0';
/* 会議室番号 */
kaigishitsu_number = PATIO;
/******************************************/
/* 先ず、この発言を CATLOG.TMP に書き出す */
/******************************************/
save_start_patio( id_name );
if ( display_log_file_sw == YES ) color( WHITE );
forever {
if ( check_check_end() == YES
&& is_1_say_end( now , mode ) == TRUE
) {
break;
};
/* 123456789 123456789 123456789 */
IFPStrEqu("続き(改行で表示 S:次の発言)",30) {
if ( NextStrLen == 2
&& strncmp( NextStrPtr , ">" , 2 ) == 0
) {
/* 2行 読み飛ばす */
delete_present_line(); delete_present_line();
continue;
};
};
CHECK_PRINT_LOG; /* ログ表示 */
GET_LINE2 break; /* 先読み */
check_set_lib_number();
};
if ( display_log_file_sw == YES ) color( LIGHTBLUE );
if ( catlog_fwrite( ) == 0 ) {
strcpy(str,"check_patio_loop 書き込みが出来ませんでした。");
error_return( str );
break;
};
/****************/
/* IDで収集? */
/****************/
if ( collect_ID_sw == YES ) {
p1 = hyoudai_line + 12;
if ( isCollectID( p1 ) >= 0 ) { /* sub.c */
save_start_mes( );
if ( catlog_fwrite( ) == 0 ) {
strcpy(str,"save_1_say 書き込みが出来ませんでした。");
error_return( str );
};
};
};
if ( isPATIOFirstLine() == NO ) check_skip_useless_line();
};
}
static void check_patio_main()
{
char id_name[ 12 ] , *p;
print_start_line(); /* *PresentStrPtr を YELLOW で表示 */
/* PATIO 設定者の ID 番号の入力を促す行? */
GET_LINE;
check_set_lib_number();
if ( PresentStrLen != 10 ) return;
IFPStrNotEqu2(":",2) return;
p = PresentStrPtr + 2;
while( isspace( *p ) ) p++; /* skip space */
strncpy( id_name , p , 8 ); /* copy ID */
id_name[ 8 ] = '\0';
touppers( id_name ); /* 大文字にする */
/* ID名であるかチェック */
if ( isIDname( id_name ) != YES ) return;
check_patio_loop( id_name );
}
/***********************************************************************/
/* */
/* check_check_end() 各発言の終了判定の入口 */
/* */
/***********************************************************************/
int check_check_end()
{
if ( PresentStrPtr == NULL ) return( YES );
if ( PresentStrLen == 0 ) return( NO );
if ( isMesEnd() == YES ) return( YES );
if ( isHPEnd() == YES ) return( YES );
if ( isPATIOEnd() == YES ) return( YES );
if ( isMailEnd() == YES ) return( YES );
if ( isCLIPEnd() == YES ) return( YES ); /* sub.c */
if ( check_end_bill() == YES ) return( YES );
/* >\n : end 条件に入れることは問題があるかもしれない */
/* 入れないことにした
IFPStrEqu2(">",PresentStrLen) return( YES );
*/
/* CCSCPY を使って整理した文書 */
IFPStrEqu2("*****",10) return( YES );
/* 123456789 123456789 1 */
IFPStrEqu2("ようこそNIFTY-Serveへ",21) return( YES );
return( NO );
}
static int check_start_line()
{
if ( PresentStrLen == 0 ) return( 0 );
/* フォーラムの入口 */
/************************************************
1:お知らせ 2:掲示板 3:電子会議
*************************************************/
if ( isMesInputLine() == YES ) { /* フォーラム */
/* 4:データライブラリ 5:会員情報 6:リアルタイム会議 */
if ( isMesInputNextLine() == YES ) return( 1 );
};
/* フォーラムの会議室の名前 */
if ( isMesForumNameLine() == YES ) return( 2 );
/* 発言の表題の行 */
if ( isMesHyoudaiLine()==YES && isMesSecondLine()==YES ) return( 3 );
/* Home Party の入口 */
/* 123456789 123456789 123 */
IFPStrEqu2("ID (改行のみ:自分のHP)",23) return( 4 );
/* MAIL */
if ( isMailFirstLine() == YES ) return( 5 );
/* BILL */
if ( check_bill_first_line() == YES ) return( 6 );
/* Home Party の入口 */
if ( isHPFirstLine() == YES ) return( 7 );
/* LIB の入口 */
if ( isLIBFirstLine() == YES ) return( 8 );
/* PATIOの入口 */
/* 123456789 123456789 123456789 */
IFPStrEqu2("ID (改行のみ:自分のパティオ)",29) return( 9 );
/* クリッピングサービスの行 */
if ( isCLIPFirstLine() == YES ) return( 10 );
if ( isCLIPLine() == YES ) return( 10 );
return( 0 );
}
static void mes_copy( char *dir_name )
{
int d;
d = check_start_line();
while ( d != 0 ) {
#ifdef TEST
printf("\nmes_copy( %d ) 今の行↓\n" , d );
present_str_print();
#endif
switch ( d ) {
case 1: /* フォーラムの入口 */
check_forum_mode();
break;
case 2: /* フォーラム名がある場合 - Fxxxxの場合 */
check_forum_name_mode(); break;
case 3: /* フォーラム名がない場合 xxx/xxxからの場合 */
check_hyoudai_line_mode( dir_name ); break;
case 4: /* Home Party の入口 */
check_hp(); break;
case 5: /* Mail の入口 */
check_mail(); break;
case 6: /* Bill の入口 */
check_bill(); break;
case 7: /* HP の発言 */
check_hp_loop( dir_name ); break;
case 8: /* LIB の入口 */
check_lib_main( dir_name ); break;
case 9: /* PATIO の入口 */
check_patio_main(); break;
case 10: /* クリッピングサービスの入口 */
check_clip_main(); break;
default:
CHECK_PRINT_LOG; /* ログ表示 */
break;
};
ERROR_CHECK;
d = check_start_line();
};
}
/***********************************************************************/
/* */
/* check_main() check.c の 入口 */
/* */
/***********************************************************************/
static void check_main_sub( char *dir_name )
{
GET_LINE; /* 先読み */
check_set_lib_number();
forever {
check_pool_delete_start = PresentStrPtr;
if ( check_start_line() != 0 ) {
mes_copy( dir_name );
} else {
CHECK_PRINT_LOG; /* ログ表示 */
ERROR_CHECK;
GET_LINE; /* 先読み */
check_set_lib_number();
};
};
}
void check_main( long fsize , const char *dir , const char *file_path )
{
char dir_name[ 24 ];
if ( is_catlog_file( file_name ) != 0 ) {
color( YELLOW );
printf("\nこのファイルはCATLOGで整理したファイルです。"
"\n\t無視してもよろしいですか? ");
color( WHITE );
if ( get_yesno_mes() == YES ) { printf( "\n無視します。");
} else { sortlog_loop_file( file_name );
};
return;
};
sprintf(partition_line,"*****log整理(%s)***** %s *****",VERSION,file_path);
forum_name[ 0 ] = '\0';
/* file.c */
if ( initial_check_pool( fsize , YES ) == FALSE ) return;
strcpy( file_name , file_path );
strcpy( dir_name , dir );
if ( last_yen( dir_name ) != dir_name ) {
error_bug( "check_main でフォーラム名に \\ 記号が入っているよ。");
};
if ( display_log_file_sw == YES ) color( LIGHTBLUE );
check_main_sub( dir_name );
end_check_pool();
}